package maple.thelittleredbook.interaction.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import maple.thelittleredbook.interaction.dto.CommentListItemDTO;
import maple.thelittleredbook.interaction.entity.Comment;
import org.apache.ibatis.annotations.*;

/**
 * 评论Mapper接口
 * 负责评论管理和查询
 */
@Mapper
public interface CommentMapper extends BaseMapper<Comment> {

    /**
     * 分页获取某个内容的评论列表
     * 具体实现在 CommentMapper.xml 中
     *
     * @param page 分页参数
     * @param contentId 内容ID
     * @param currentUserId 当前用户ID（用于查询点赞状态）
     * @param orderBy 排序方式：created_at（按时间）或 like_count（按点赞数）
     * @return 评论分页列表
     */
    IPage<CommentListItemDTO> selectCommentsByContentId(Page<CommentListItemDTO> page,
                                                        @Param("contentId") Long contentId,
                                                        @Param("currentUserId") Long currentUserId,
                                                        @Param("orderBy") String orderBy);

    /**
     * 插入评论
     *
     * @param contentId 内容ID
     * @param userId 用户ID
     * @param commentText 评论内容
     * @return 插入的记录数
     */
    @Insert("INSERT INTO comments (content_id, user_id, comment_text, like_count, is_deleted, created_at, updated_at) " +
            "VALUES (#{contentId}, #{userId}, #{commentText}, 0, FALSE, NOW(), NOW())")
    int insertComment(@Param("contentId") Long contentId,
                      @Param("userId") Long userId,
                      @Param("commentText") String commentText);

    /**
     * 逻辑删除评论
     *
     * @param commentId 评论ID
     * @param userId 用户ID（确保只能删除自己的评论）
     * @return 更新的记录数
     */
    @Update("UPDATE comments SET is_deleted = TRUE, updated_at = NOW() " +
            "WHERE id = #{commentId} AND user_id = #{userId} AND is_deleted = FALSE")
    int updateCommentDeleted(@Param("commentId") Long commentId,
                             @Param("userId") Long userId);

    /**
     * 逻辑删除评论（管理员删除任意评论）
     *
     * @param commentId 评论ID
     * @return 更新的记录数
     */
    @Update("UPDATE comments SET is_deleted = TRUE, updated_at = NOW() " +
            "WHERE id = #{commentId} AND is_deleted = FALSE")
    int updateCommentDeletedByAdmin(@Param("commentId") Long commentId);
}